package cn.duhengkui.national.valuelist.core.data;

import java.util.List;
import java.util.Map;

import cn.duhengkui.national.valuelist.core.entity.BaseEntity;
import cn.duhengkui.national.valuelist.core.entity.BaseQueryObject;
import cn.duhengkui.national.valuelist.core.entity.PaginatedResult;



/**   
 * <table border="1">
 *	<tr><td>包名称：</td><td>cn.duhengkui.national.valuelist.core.data</td></tr>
 *	<tr><td>类名称：</td><td>ExtendDao</td></tr>
 *	<tr><td>类描述：</td><td>扩展DAO</td></tr>
 *	<tr><td>创建人：</td><td>杜恒奎</td></tr>
 *  <tr><td>创建时间：</td><td>2018年6月7日/下午2:42:52</td></tr> 
 *  <tr><td>版本：</td><td>1.0.0</td></tr>
 * </table>   
 *     
 */
public interface ExtendDao<Entity extends BaseEntity> {
	
	/**
	 * 单体更新
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 删除记录条数
	 */
	int update(String sql, Object[] args);

	/**
	 * 批量更新
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 更新记录条数
	 */
	int[] batchUpdate(String sql, List<Object[]> args);
	
	/**
	 * 批量删除
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 删除记录条数
	 */
	int batchRemove(String sql, Object[] args);
	
	/**
	 * 单条记录查询
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 实体对象
	 */
	Entity single(String sql, Object[] args);
	
	
	
	/**
	 * 单条记录查询(QO)
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 实体对象
	 */
	BaseQueryObject single(String sql, Object[] args,Class<? extends BaseQueryObject> qclazz);
	
	/**
	 * 列表查询
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 实体对象集合
	 */
	List<Entity> query(String sql, Object[] args);
	
	
	/**
	 * 列表查询（QO）
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 实体对象集合
	 */
	List<BaseQueryObject> query(String sql, Object[] args,Class<? extends BaseQueryObject> qclazz);
	
	
	
	
	/**
	 * 分页查询
	 * @param sql SQL语句
	 * @param pr 分页查询对象，需要设置：查询页数和每页记录条数
	 * @param args 参数
	 * @return 分页对象
	 */
	PaginatedResult<Entity> query(String sql, PaginatedResult<Entity> pr, Object[] args);
	
	
	/**
	 * 分页查询(QO)
	 * @param sql SQL语句
	 * @param pr 分页查询对象，需要设置：查询页数和每页记录条数
	 * @param args 参数
	 * @return 分页对象
	 */
	PaginatedResult<BaseQueryObject> query(String sql, PaginatedResult<BaseQueryObject> pr, Object[] args,Class<? extends BaseQueryObject> qclazz);
	
	
	/**
	 * 自定义返回值查询
	 * @param sql SQL语句
	 * @param args 参数
	 * @return 实体对象集合
	 */
	List<Map<String,Object>> queryFree(String sql, Object[] args);
	
	
}